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]
以下是 .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]