我正在尝试创建虚假目录以将特定参数重定向到特定的子目录:
From: www.example.com/username
To: www.example.com/posts?uid=alex
From: www.example.com/p/1234
To: www.example.com/posts?url=1234
从堆栈溢出中的相同主题的其余问题来看,这是一个更复杂的例子,大多数答案都没有解释它是如何工作的,因此我无法得出如何解决这个问题的结论。 / p>
答案 0 :(得分:3)
尝试:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([^/]+)$ /posts?url=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ /posts?uid=$1 [L]
首先,您需要使所有链接看起来像这样:
www.example.com/username
www.example.com/p/1234
上述重写规则将与/p/1234
(通过^p/([^/]+)$
)和/username
(通过^([^/]+)$
)匹配,并在内部将其重写为/posts
URI。请注意,这将不更改浏览器位置栏中的URL,因为这是外部重定向。如果有人输入www.example.com/posts?uid=alex
,则网址将保持不变。
答案 1 :(得分:1)
启用mod_rewrite
和.htaccess
至httpd.conf
,然后将此代码放入DOCUMENT_ROOT/.htaccess
文件中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p/([^/]+)/?$ /posts?url=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /posts?uid=$1 [L,QSA,NC]