1

我不知道如何使用 .htaccess 文件来更改/隐藏 URL 中的变量

我想使用WordPress的 .htaccess 文件, 我的 .htaccess 文件已经包含以下脚本:

    # BEGIN WordPress

    <IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /my_site/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /my_site/index.php 

    [L]
    </IfModule>

    # END WordPress

我有网址

http://localhost/my_site/project-detail/?pro_id=7

我想隐藏pro_id=7 之类的

http://localhost/my_site/project-detail/

但可以在我的 php 脚本文件中捕获这个 $_GET['pro_id'] 。

或者

http://localhost/my_site/project-detail/7

我也试过

RewriteRule ^project-detail/(.*) /project-detail/?pro_id=$1
4

2 回答 2

0

您可以尝试在指令上方添加这些RewriteBase /my_site/,因为它们需要在您的 wordpress 内容之前。

首先,您可以直接访问实际请求以重定向到没有查询字符串的 URL:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /my_site/project-detail/?\?pro_id=([^&\ ]+)&?([^\ ]*)
RewriteRule ^ /my_site/project-detail/%1?%2 [R=301,L]

这将使它成为这样的 URL:http://localhost/my_site/project-detail/?pro_id=7重定向http://localhost/my_site/project-detail/7和 URLhttp://localhost/my_site/project-detail/?pro_id=7&other=param重定向http://localhost/my_site/project-detail/7?other=param。如果您根本不需要任何额外的参数,请从规则的目标中删除%2 。这使得浏览器的地址栏更改为没有pro_id查询字符串的 URL。现在我们必须在内部将其重写回查询字符串:

RewriteRule ^my_site/project-detail/([^/]+)$ /my_site/project-detail/?pro_id=$1 [QSA,L]

所以在内部,URI 被重写回,/my_site/project-detail/?pro_id=7但浏览器的地址栏仍然有看起来干净的 URL。

于 2012-07-16T20:06:39.827 回答
0

你有没有尝试过这样的事情:

RewriteEngine On 
RewriteRule ^project-detail/([0-9]+)$ project-detail/?pro_id=$1
于 2012-07-16T10:05:34.693 回答