我想用 .htaccess 重写 https://blog/home/post?read=example 到 https://blog/home/example
I want to rewrite https://blog/home/post?read=example to https://blog/home/example with .htaccess
我尝试了很多方法,但 none 奏效了。
Blog 是域的名称,Home 是域中的文件夹,post.php 是从数据库获取详细信息的页面。
所以,在我的域中,我有:
home/post.php
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_-]+)$ /post?read= [L] # Handle page requests
以上是我使用的最后一个代码,它不起作用。我收到 404 错误。
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_-]+)$ /post?read= [L] # Handle page requests
The .htaccess is located in the root of the folder.
您似乎忽略了 home
子目录。 (尽管您在问题中提到了 home
和 Home
- 请注意这是 case-sensistive。)如果“/post
是 PHP 文件" 那么您大概应该重写为 post.php
,而不仅仅是 post
?
请注意,Apache 不支持 line-end 注释,正如您在此处使用的那样。 (最好的情况是它们会被忽略,最坏的情况是它们会触发 500 错误。)
如果 .htaccess
文件位于文档根目录中,如您所建议的,那么您需要编写如下规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^home/([\w-]+)$ home/post.php?read= [L]
\w
shorthand字符class与[A-Za-z0-9_]
相同。
RewriteRule
模式 与 URL-path 相对于 .htaccess
文件位置的匹配。
另一方面,如果 .htaccess
文件位于 /home
子目录中(即在 /home/.htaccess
中),那么您可以这样编写规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)$ post.php?read= [L]
请注意,替换 字符串上没有斜杠前缀。
我尝试了很多方法,但 none 奏效了。 Blog 是域的名称,Home 是域中的文件夹,post.php 是从数据库获取详细信息的页面。 所以,在我的域中,我有: home/post.php
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_-]+)$ /post?read= [L] # Handle page requests
以上是我使用的最后一个代码,它不起作用。我收到 404 错误。
RewriteEngine On # Turn on the rewriting engine RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Za-z0-9_-]+)$ /post?read= [L] # Handle page requests
The .htaccess is located in the root of the folder.
您似乎忽略了 home
子目录。 (尽管您在问题中提到了 home
和 Home
- 请注意这是 case-sensistive。)如果“/post
是 PHP 文件" 那么您大概应该重写为 post.php
,而不仅仅是 post
?
请注意,Apache 不支持 line-end 注释,正如您在此处使用的那样。 (最好的情况是它们会被忽略,最坏的情况是它们会触发 500 错误。)
如果 .htaccess
文件位于文档根目录中,如您所建议的,那么您需要编写如下规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^home/([\w-]+)$ home/post.php?read= [L]
\w
shorthand字符class与[A-Za-z0-9_]
相同。
RewriteRule
模式 与 URL-path 相对于 .htaccess
文件位置的匹配。
另一方面,如果 .htaccess
文件位于 /home
子目录中(即在 /home/.htaccess
中),那么您可以这样编写规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)$ post.php?read= [L]
请注意,替换 字符串上没有斜杠前缀。