htaccess 中的重写规则不起作用

Rewrite rule in htaccess is not working

以下是 .htaccess 规则:

RewriteEngine On
RewriteRule ^([^/]*)$ content.php?seourl= [L]
RewriteRule ^pdf/([^/]*)$ content-single.php?seourl= [L]
RewriteRule ^browsepdf$ browse.php [L]
RewriteRule ^browsepdf-([^/]*)$ browse.php?page= [L]
RewriteRule ^download/([^/]*)$ download.php?pdf= [L]
RewriteRule ^sitemap.xml$ xmlsitemap.php [L]

Options -Indexes

这里每个URL都指向content.php?seourl=,甚至css,js和图片文件。

这是我需要的一些示例 URL,

http://example.com/sjskjfsk21
http://example.com/asfasfasf43sf
http://example.com/pdf/fhfdhdh3432aaf
http://example.com/pdf/aisfyiahm2faf3
http://example.com/browsepdf
http://example.com/browsepdf-1
http://example.com/browsepdf-2
http://example.com/download/fjaskfjalsk3rs
http://example.com/download/usaydiy7aisydi
http://example.com/sitemap.xml

任何人都可以修复 .htaccess 文件。

Here every url is pointing to "content.php?seourl="

因为您的第一个(通用)规则捕获了所有请求。您需要更改顺序,以便首先使用最具体的 规则,最后使用最通用(包罗万象)的规则。在您的情况下,您只需要将第一条规则移到最后。例如:

RewriteRule ^pdf/([^/]*)$ content-single.php?seourl= [L]
RewriteRule ^browsepdf$ browse.php [L]
RewriteRule ^browsepdf-([^/]*)$ browse.php?page= [L]
RewriteRule ^download/([^/]*)$ download.php?pdf= [L]
RewriteRule ^sitemap\.xml$ xmlsitemap.php [L]
RewriteRule ^([^/]*)$ content.php?seourl= [L]

注意:我对 sitemap.xml 中的点进行了反斜杠转义以匹配文字点,否则它匹配 任何 字符。

even css, js and image files.

您可以在文件开头为这些静态资源创建一个例外,在现有指令之前。例如:

RewriteRule \.(js|css|png|jpg|gif)$ - [L]

对于以任何规定的文件扩展名结尾的任何 URL,则停止处理当前的 mod_rewrite 规则。

或者(尽管效率可能略低),您可以阻止处理对现有文件的请求。同样,这在您现有的 mod_rewrite 指令之前。例如:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

但是,这现在必须检查每个 请求,以确定文件系统上是否存在映射到该请求的文件。 (如果需要,也可以与上述规则结合使用。)

更新: 综合起来,我们有:

# Exclude any existing files from being rewritten
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Specific rewrites
RewriteRule ^pdf/([^/]*)$ content-single.php?seourl= [L]
RewriteRule ^browsepdf$ browse.php [L]
RewriteRule ^browsepdf-([^/]*)$ browse.php?page= [L]
RewriteRule ^download/([^/]*)$ download.php?pdf= [L]
RewriteRule ^sitemap\.xml$ xmlsitemap.php [L]

# Any other requests for the form "/<anything>"
RewriteRule ^([^/]*)$ content.php?seourl= [L]