更新:借助答案,我可以进行此更新。我想在我的.htaccess中使用以下表达式来工作。 (.htaccess的完整脚本也有问题)
RewriteCond %{REQUEST_URI} ((mypage2(/\d{4}-\d{2}-\d{2})?/\d{1,2}) |about-us)
RewriteRule ^(.+)$ /subsite/#/$1 [R=301,NC]
问题详情:
我希望htacces将这三个网址重定向到新的子网站网址,例如mydomain / page2 / parameter1 / parameter2到mydomain / subsite /#/ page2 / parameter1 / parameter2和mydomain / page2 / parameter1到mydomain / subsite /# /第2页/参数1
(这不是强制性的)在子网站中我想使用history push state来清理/操作网址以向用户显示 mydomain / page2 / parameter1 / parameter2 instaed of mydomain / subsite /#/ page2 / parameter1 / parameter2
我的.htaccess就像
RewriteEngine On
RewriteBase /
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/#/$1 [L,QSA]
以下是我最想要的东西
RewriteCond %{REQUEST_URI} ((mypage2(/\d{4}-\d{2}-\d{2})?/\d{1,2}) |about-us)
RewriteRule ^(.+)$ /subsite/#/$1 [R=301,NC] ==> when url is like mypage2(/date optional)/pagenumber then redirect it to subsite/#/mypage2(/date optional)/pagenumber
这是可选的,如果没有实现以下我可以活着
在我的routing.js中,我想操纵像
这样的网址 $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams,
fromState, fromParams, options, Data) {
var cleanUrl = window.location.toString().replace(subsite+'/#/', '');
window.history.pushState(null, null, cleanUrl);
//alert("Yes this works, it shows me the required url in browser at this moment");
//Here I am trying to clean the url
//But after that it reloads, some unwanted redirection happens after it
});
答案 0 :(得分:2)
好的,请尝试以下规则,
RewriteEngine On
RewriteCond %{REQUEST_URI} ^!(aSpecialString2|aSpecialString1|/)
RewriteRule ^(.+)$ /#/$1 [R=301,NC]
此处您不会在网址中获得#/uri
,但您会获得%23
html实体,该实体会在网址中与#
一样回复,您的应用就可以正常运行。
而且我假设你会用角度来解决这个问题。
答案 1 :(得分:1)
您可以在服务器端使用mod_rewrite和php来完成此任务
创建index.php
<?php
if ( !empty($_GET['id']) ) {
$protocol = 'http://';
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
$protocol = 'https://';
}
header('Location:' . $protocol . $_SERVER["HTTP_HOST"]. '/#/' . $_GET[id]);
exit();
}
?>
You html here
在.htaccess
中添加以下内容RewriteEngine On
RewriteBase /
RewriteRule "index.php" - [L]
RewriteRule "^(.*)$" "index.php?id=$1"
要绕过某些网址aString1
,aString2
,您可以使用:
RewriteEngine On
RewriteBase /
RewriteRule "index.php" - [L]
RewriteCond %{REQUEST_URI} !^(aString1)
RewriteCond %{REQUEST_URI} !^(aString2)
RewriteRule "^(.*)$" "index.php?id=$1"
要绕过您可以使用的资产:
RewriteEngine On
RewriteBase /
RewriteRule "index.php" - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^(.*)$" "index.php?id=$1"
答案 2 :(得分:0)
您可以在客户端使用mod_rewrite和javascript片段进行此任务
将以下内容添加到.htaccess
RewriteEngine On
RewriteBase /
RewriteRule "^([^?#].*)$" "/?$1" [R=301,NC]
将以下内容添加到主html
<script>
window.onload = function() {
location.hash = '/' + location.search.substr(1)
}
</script>
现在,http://example.com/?s1/s2#/s1/s2将重定向到https://github.com/nicolas-albert/TestGit
答案 3 :(得分:0)
如果您可以访问服务器上的.htaccess,则可以修改它以使用代码中的URL而不插入#。
实际上有2个部分,一个在Angularjs应用程序中启用HTML5Mode,另一个在服务器上编辑.htaccess文件以成功处理此问题。
我根本不使用PHP,但是能够在本文后的几个网站上使用它:https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/#thecode
答案 4 :(得分:0)
访问页面后,我可以轻松清理网址,不显示哈希值,所以 我需要在网址中包含哈希,而用户没有提供网址 散列
为什么你认为用户会从网址中删除哈希值?没有理由这样做。角度路由基于url-hashes,否则用户每次访问不同的URL时都会重新呈现完整的应用视图。那么它不是SinglePageApp。 例如,PHP应用程序基于oquery字符串。如果你删除&#34;?product_id = 11&#34;从网址,然后您的路由将无法正常工作。 哈希也是如此。不要碰他们,他们在这里是有原因的。
答案 5 :(得分:0)
试试这个:
user1@gmail.com;user2@gmail.com;user3@gmail.com
注意第一条规则的评论。
您可以在以下网站中试用您的规则:http://htaccess.mwl.be/